<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<!-- Standard Head Part -->
<head>
<title>NUnit - Category</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="Content-Language" content="en-US">
<link rel="stylesheet" type="text/css" href="nunit.css">
<link rel="shortcut icon" href="favicon.ico">
</head>
<!-- End Standard Head Part -->

<body>

<!-- Standard Header for NUnit.org -->
<div id="header">
  <a id="logo" href="http://www.nunit.org"><img src="img/logo.gif" alt="NUnit.org" title="NUnit.org"></a>
  <div id="nav">
    <a href="http://www.nunit.org">NUnit</a>
    <a class="active" href="index.html">Documentation</a>
  </div>
</div>
<!-- End of Header -->

<div id="content">

<script language="JavaScript" src="codeFuncs.js" ></script> <!-- Do it this way for IE -->

<h3>CategoryAttribute (NUnit 2.2)</h3>
<p>The Category attribute provides an alternative to suites for dealing with groups 
	of tests. Either individual test cases or fixtures may be identified as 
	belonging to a particular category. Both the gui and console test runners allow 
	specifying a list of categories to be included in or excluded from the run. 
	When categories are used, only the tests in the selected categories will be 
	run. Those tests in categories that are not selected are not reported at all.</p>
<p>This feature is accessible by use of the /include and /exclude arguments to the 
	console runner and through a separate "Categories" tab in the gui. The gui 
	provides a visual indication of which categories are selected at any time.</p>

<h4>Test Fixture Syntax</h4>

<div class="code">

<div class="langFilter">
	<a href="javascript:Show('DD1')" onmouseover="Show('DD1')"><img src="img/langFilter.gif" width="14" height="14" alt="Language Filter"></a>
	<div id="DD1" class="dropdown" style="display: none;" onclick="Hide('DD1')">
		<a href="javascript:ShowCS()">C#</a><br>
		<a href="javascript:ShowVB()">VB</a><br>
		<a href="javascript:ShowMC()">C++</a><br>
		<a href="javascript:ShowJS()">J#</a><br>
	</div>
</div>

<pre class="cs">namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;

  [TestFixture]
  [Category(&quot;LongRunning&quot;)]
  public class LongRunningTests
  {
    // ...
  }
}
</pre>

<pre class="vb">Imports System
Imports Nunit.Framework

Namespace Nunit.Tests

  &lt;TestFixture(), Category(&quot;LongRunning&quot;)&gt;
  Public Class LongRunningTests
    &#39; ...
  End Class
End Namespace
</pre>

<pre class="mc">#using &lt;Nunit.Framework.dll&gt;
using namespace System;
using namespace NUnit::Framework;

namespace NUnitTests
{
  [TestFixture]
  [Category(&quot;LongRunning&quot;)]
  public __gc class LongRunningTests
  {
    // ...
  };
}

#include &quot;cppsample.h&quot;

namespace NUnitTests {
  // ...
}
</pre>

<pre class="js">package NUnit.Tests;

import System.*;
import NUnit.Framework.TestFixture;


/** @attribute NUnit.Framework.TestFixture() */
/** @attribute NUnit.Framework.Category(&quot;LongRunning&quot;) */
public class LongRunningTests
{
  // ...
}
</pre>
</div>
<h4>Test Syntax</h4>
<div class="code">
	
<div class="langFilter">
	<a href="javascript:Show('DD2')" onmouseover="Show('DD2')"><img src="img/langFilter.gif" width="14" height="14" alt="Language Filter"></a>
	<div id="DD2" class="dropdown" style="display: none;" onclick="Hide('DD2')">
		<a href="javascript:ShowCS()">C#</a><br>
		<a href="javascript:ShowVB()">VB</a><br>
		<a href="javascript:ShowMC()">C++</a><br>
		<a href="javascript:ShowJS()">J#</a><br>
	</div>
</div>

<pre class="cs">namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;

  [TestFixture]
  public class SuccessTests
  {
    [Test]
    [Category(&quot;Long&quot;)]
    public void VeryLongTest()
    { /* ... */ }
}
</pre>

<pre class="vb">Imports System
Imports Nunit.Framework

Namespace Nunit.Tests

  &lt;TestFixture()&gt;
  Public Class SuccessTests
    &lt;Test(), Category(&quot;Long&quot;)&gt; Public Sub VeryLongTest()
      &#39; ...
    End Sub
  End Class
End Namespace
</pre>

<pre class="mc">#using &lt;Nunit.Framework.dll&gt;
using namespace System;
using namespace NUnit::Framework;

namespace NUnitTests
{
  [TestFixture]
  public __gc class SuccessTests
  {
    [Test][Category(&quot;Long&quot;)] void VeryLongTest();
  };
}

#include &quot;cppsample.h&quot;

namespace NUnitTests {
  // ...
}
</pre>

<pre class="js">package NUnit.Tests;

import System.*;
import NUnit.Framework.TestFixture;


/** @attribute NUnit.Framework.TestFixture() */
public class SuccessTests
{
  /** @attribute NUnit.Framework.Test() */
  /** @attribute NUnit.Framework.Category(&quot;Long&quot;) */
  public void VeryLongTest()
  { /* ... */ }
}
</pre>

</div>

<h3>Custom Category Attributes</h3>

<p>Beginning with <b>NUnit 2.4</b>, it is possible to define custom
attributes that derive from <b>CategoryAttribute</b> and have them
recognized by NUnit. The default protected constructor of CategoryAttribute 
sets the category name to the name of your class.

<p>Here's an example that creates a category of Critical tests. It works
just like any other category, but has a simpler syntax. A test reporting
system might make use of the attribute to provide special reports.

<div class=code><pre>
[AttributeUsage(AttributeTargets.Method, AllowMultiple=false)]
public class CriticalAttribute : CategoryAttribute { }

...

[Test, Critical]
public void MyTest()
{ /*...*/ }
</pre></div>

</div>

<!-- Submenu -->
<div id="subnav">
<ul>
<li><a href="index.html">NUnit 2.4.8</a></li>
<ul>
<li><a href="getStarted.html">Getting&nbsp;Started</a></li>
<li><a href="assertions.html">Assertions</a></li>
<li><a href="attributes.html">Attributes</a></li>
<ul>
<li id="current"><a href="category.html">Category</a></li>
<li><a href="culture.html">Culture</a></li>
<li><a href="description.html">Description</a></li>
<li><a href="exception.html">Expected&nbsp;Exception</a></li>
<li><a href="explicit.html">Explicit</a></li>
<li><a href="ignore.html">Ignore</a></li>
<li><a href="platform.html">Platform</a></li>
<li><a href="property.html">Property</a></li>
<li><a href="setCulture.html">SetCulture</a></li>
<li><a href="setup.html">Setup</a></li>
<li><a href="setupFixture.html">SetUp&nbsp;Fixture</a></li>
<li><a href="suite.html">Suite</a></li>
<li><a href="teardown.html">Teardown</a></li>
<li><a href="test.html">Test</a></li>
<li><a href="testFixture.html">Test&nbsp;Fixture</a></li>
<li><a href="fixtureSetup.html">Test&nbsp;Fixture&nbsp;SetUp</a></li>
<li><a href="fixtureTeardown.html">Test&nbsp;Fixture&nbsp;TearDown</a></li>
</ul>
<li><a href="nunit-console.html">Console&nbsp;Runner</a></li>
<li><a href="nunit-gui.html">Gui&nbsp;Runner</a></li>
<li><a href="features.html">Other&nbsp;Features</a></li>
<li><a href="releaseNotes.html">Release&nbsp;Notes</a></li>
<li><a href="samples.html">Samples</a></li>
<li><a href="license.html">License</a></li>
</ul>
</ul>
</div>
<!-- End of Submenu -->


<!-- Standard Footer for NUnit.org -->
<div id="footer">
  Copyright &copy; 2008 Charlie Poole. All Rights Reserved.
</div>
<!-- End of Footer -->

</body>
</html>
